[CHA-3175] Show support for Python 3.14#253
Conversation
CHA-3175. Also drop stale 3.9 classifier (requires-python is >=3.10) and align README minimum version.
📝 WalkthroughWalkthroughThe PR updates Python version support consistently across the project. Python 3.14 is added to the test matrix in the CI workflow, Python 3.9 is removed from project classifiers, and the documented minimum version is raised from 3.9+ to 3.10+. ChangesPython Version Support Update
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/run_tests.yml:
- Line 78: The video test matrix currently lists python-version: ["3.10",
"3.11", "3.12", "3.13", "3.14"] which causes CI failures due to missing wheels
for aiortc/av/scipy on 3.14; remove "3.14" from the python-version array in the
video test matrix (the python-version key in .github/workflows/run_tests.yml) so
the job no longer runs against Python 3.14, or alternatively conditionalize that
job to exclude 3.14 until upstream wheels are available.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2e938598-84c6-4b5b-a62e-e143a922edbf
📒 Files selected for processing (3)
.github/workflows/run_tests.ymlREADME.mdpyproject.toml
| fail-fast: false | ||
| matrix: | ||
| python-version: ["3.10", "3.11", "3.12", "3.13"] | ||
| python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if Python 3.14 wheels exist for video dependencies
echo "=== Checking Python 3.14 wheel availability ==="
echo ""
# Extract video dependencies from pyproject.toml
video_deps=(
"aiortc>=1.14.0,<1.15.0"
"av>=14.2.0,<17"
"numpy>=2.2.6,<2.3"
"scipy>=1.15.3,<1.16"
)
for dep in "${video_deps[@]}"; do
pkg_name=$(echo "$dep" | cut -d'>' -f1 | cut -d'=' -f1 | cut -d'<' -f1)
echo "Checking $pkg_name..."
# Get latest version info from PyPI
curl -s "https://pypi.org/pypi/$pkg_name/json" | \
jq -r '.releases | to_entries | last | .value[] | select(.python_version != "source") | .filename' | \
grep -i "cp314" || echo " ⚠️ No cp314 wheels found for $pkg_name"
echo ""
done
echo "=== Checking grpcio-tools (dev dependency) ==="
curl -s "https://pypi.org/pypi/grpcio-tools/1.76.0/json" | \
jq -r '.urls[] | select(.python_version != "source") | .filename' | \
grep -i "cp314" || echo " ⚠️ No cp314 wheels found for grpcio-tools==1.76.0"Repository: GetStream/stream-py
Length of output: 1992
Remove Python 3.14 from the video test matrix or it will cause CI failures.
Python 3.14 wheels are unavailable for critical video dependencies: aiortc, av, and scipy (pinned to <1.16). CI will fail during dependency resolution when attempting to test against Python 3.14.
Either exclude Python 3.14 from the video test matrix, or wait for upstream projects to publish Python 3.14 wheels.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/run_tests.yml at line 78, The video test matrix currently
lists python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] which causes CI
failures due to missing wheels for aiortc/av/scipy on 3.14; remove "3.14" from
the python-version array in the video test matrix (the python-version key in
.github/workflows/run_tests.yml) so the job no longer runs against Python 3.14,
or alternatively conditionalize that job to exclude 3.14 until upstream wheels
are available.
There was a problem hiding this comment.
Conditional scipy>=1.16.1 for python>=3.14. Not an issue.
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check video dependencies in pyproject.toml
echo "=== Video dependencies in pyproject.toml ==="
grep -A 50 '\[project.optional-dependencies\]' pyproject.toml | grep -A 30 'video'
echo ""
echo "=== Full optional-dependencies section ==="
cat pyproject.toml | grep -A 60 'optional-dependencies'
Length of output: 1744
@mogita, you're right — I apologize for the incorrect flag. The pyproject.toml already handles the version-sensitive dependencies correctly:
scipy>=1.15.3,<1.16 ; python_version < '3.14'/scipy>=1.16.1,<1.17 ; python_version >= '3.14'numpy>=2.2.6,<2.3 ; python_version < '3.14'/numpy>=2.3.2,<2.4 ; python_version >= '3.14'
Additionally, the aiortc changelog explicitly notes "Add support for Python 3.14, drop end-of-life Python 3.9", so that concern is addressed as well. The review comment was mistaken.
CHA-3175. Pinned numpy 2.2.6 and scipy 1.15.3 lack cp314 wheels, so uv falls back to source build which fails on the runner. Add marker- conditional bumps (numpy>=2.3.2, scipy>=1.16.1 for python>=3.14) so cp314 wheels resolve. Earlier Python versions keep their existing pins.
`getstream` 3.4.0 is on PyPI now (the first release that includes the Python 3.14 wheel-availability fix from GetStream/stream-py#253), so the temporary `[tool.uv.sources]` git pin against a `main` commit is no longer needed. * Drop the `getstream = { git = ... }` source override in the root `pyproject.toml`. * Raise the lower bound to `>=3.4.0` in `agents-core` and the `getstream` plugin (3.3.4 cannot install on 3.14). * Regenerate `uv.lock` (now resolves `getstream` from PyPI). * Trim the matching paragraph in `CHANGELOG.md` so it no longer mentions a temporary pin.
…CI (#582) * chore: declare Python 3.14 support and add per-version compat CI Lifts the `<3.14` cap added in #573 from `agents-core` and every plugin except `kokoro` and `smart_turn` (both pin `numpy<2.3`, which conflicts with the `numpy>=2.3.2` `getstream[webrtc]` carries on 3.14). The workspace temporarily sources `getstream` from a `main` commit until a release containing GetStream/stream-py#253 lands on PyPI. `smart_turn` and `vogent` had their `requires-python` raised to `>=3.11` — both depend on `onnxruntime>=1.24.3`, which has no `cp310` wheels, so the previous `>=3.10` metadata was broken. Adds `dev.py check-python-versions <ver>` and a matching `.github/workflows/python-versions.yml` matrix (3.10–3.14). For every workspace member it resolves `pyproject.toml` from a tmpdir (so workspace `override-dependencies` don't mask the install path real users see) and skips members whose `requires-python` excludes the target. This is what caught the `smart_turn`/`vogent` 3.10 regression. * chore(vogent): cap requires-python at <3.14 `vogent-turn==0.1.1` pulls `onnxruntime-gpu==1.22.*` on Linux/Windows x86_64, and that has no `cp314` wheels. The new compat CI caught this on Ubuntu — the macOS local run had missed it because the platform marker `(platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'win32')` excludes macOS arm64 from the `onnxruntime-gpu` dependency. * chore: address CodeRabbit feedback * CHANGELOG: add (#582) to the Python 3.14 support and the `smart_turn`/`vogent` `requires-python` fix headings, matching the existing per-entry PR-reference convention. * Examples that depend on the now-3.11+ `smart_turn` or `vogent` plugins (pocket, inworld, openrouter, moondream, elevenlabs, fast_whisper, fish, mistral, examples/01_simple_agent_example) had their own `requires-python` floors raised so their metadata reflects what actually installs. Skipped: the suggestion to pin `actions/checkout` to a full commit SHA and set `persist-credentials: false`. The other workflows in the repo (`ci.yml`, `run_tests.yml`, `daily.yml`) all use `@v6` with default credential handling, and matching that pattern is more valuable here than a workflow-only deviation. * chore: bump getstream to >=3.4.0 and drop temporary git pin `getstream` 3.4.0 is on PyPI now (the first release that includes the Python 3.14 wheel-availability fix from GetStream/stream-py#253), so the temporary `[tool.uv.sources]` git pin against a `main` commit is no longer needed. * Drop the `getstream = { git = ... }` source override in the root `pyproject.toml`. * Raise the lower bound to `>=3.4.0` in `agents-core` and the `getstream` plugin (3.3.4 cannot install on 3.14). * Regenerate `uv.lock` (now resolves `getstream` from PyPI). * Trim the matching paragraph in `CHANGELOG.md` so it no longer mentions a temporary pin. * chore(ci): rename "Python compat" workflow to "Python compatibility check" `Python compat` was ambiguous out of context — could read as a feature claim rather than a CI gate. Renaming the workflow (and its `concurrency` group) makes it clear at a glance that the job verifies dependency resolution across Python versions.
Summary
run_tests.ymlProgramming Language :: Python :: 3.14trove classifier inpyproject.toml; drop the stale3.9entry (contradictedrequires-python = ">=3.10")Python 3.9+toPython 3.10+Linear: CHA-3175
Test plan
aiortc,av,numpy<2.3,scipy<1.16,grpcio-tools==1.76.0), decide whether to exclude 3.14 from the video job or revert the support claimSummary by CodeRabbit